<template>
   <div>
      <TypeNav />
      <div class="main">
         <div class="py-container">
            <!--bread-->
            <div class="bread">
               <ul class="fl sui-breadcrumb">
                  <li>
                     <a href="#">全部结果</a>
                  </li>
               </ul>
               <!-- 面包屑 -->
               <ul class="fl sui-tag">
                  <!-- 分类面包屑 -->
                  <li class="with-x" v-show="searchParams.categoryName">{{searchParams.categoryName}}<i
                        @click="removeCategoryName">×</i></li>
                  <!-- 关键字面包屑 -->
                  <li class="with-x" v-show="searchParams.keyword">{{searchParams.keyword}}<i
                        @click="removeKeyword">×</i></li>
                  <!-- 品牌面包屑 -->
                  <!-- 使用split将数据1：小米只展示为小米 -->
                  <li class="with-x" v-show="searchParams.trademark">{{searchParams.trademark.split(":")[1]}}
                     <i @click="removeTradeMark">×</i>
                  </li>
                  <!-- 平台售卖属性值面包屑 -->
                  <li class="with-x" v-for="(attrValue,index) in searchParams.props" :key="index">
                     {{attrValue.split(":")[1]}}<i @click="removeAttr(index)">×</i></li>
               </ul>
            </div>

            <!--selector-->
            <!-- 父组件设置自定义事件 -->
            <SearchSelector @trademarkInfo='trademarkInfo' @attrInfo="attrInfo" />

            <!--details-->
            <div class="details clearfix">
               <!-- 排序模块 -->
               <div class="sui-navbar">
                  <div class="navbar-inner filter">
                     <ul class="sui-nav">
                        <!-- 当isOne true时，class=active -->
                        <li :class="{active:isOne}" @click="changeOrder(1)">
                           <a>综合
                              <span v-show="isOne" class="iconfont"
                                 :class="{'icon-up':isAsc,'icon-down':isDesc}"></span>
                           </a>
                        </li>
                        <li :class="{active:isTwo}" @click="changeOrder(2)">
                           <a>价格
                              <span v-show="isTwo" class="iconfont"
                                 :class="{'icon-up':isAsc,'icon-down':isDesc}"></span>
                           </a>
                        </li>
                     </ul>
                  </div>
               </div>
               <!-- 销售产品列表 -->
               <div class="goods-list">
                  <ul class="yui3-g">
                     <li class="yui3-u-1-5" v-for="(good,index) in goodsList" :key="good.id">
                        <div class="list-wrap">
                           <div class="p-img">
                              <!-- 路由跳转时要带商品id，跳转后的路由要用商品id展示具体哪个商品数据 -->
                              <router-link :to="`/detail/${good.id}`">
                                 <img v-lazy="good.defaultImg" />
                              </router-link>
                           </div>
                           <div class="price">
                              <strong>
                                 <em>¥ </em>
                                 <i>{{good.price}}</i>
                              </strong>
                           </div>
                           <div class="attr">
                              <a target="_blank" href="item.html"
                                 title="促销信息，下单即赠送三个月CIBN视频会员卡！【小米电视新品4A 58 火爆预约中】">{{good.title}}</a>
                           </div>
                           <div class="commit">
                              <i class="command">已有<span>2000</span>人评价</i>
                           </div>
                           <div class="operate">
                              <a href="success-cart.html" target="_blank"
                                 class="sui-btn btn-bordered btn-danger">加入购物车</a>
                              <a href="javascript:void(0);" class="sui-btn btn-bordered">收藏</a>
                           </div>
                        </div>
                     </li>
                  </ul>
               </div>
               <!-- 使用分页器-->
               <Pagination 
               :pageNo="searchParams.pageNo" 
               :pageSize="searchParams.pageSize" 
               :total="total" 
               :continues="5" 
               @getPageNo="getPageNo"/>
            </div>
         </div>
      </div>
   </div>
</template>

<script>
import { mapGetters, mapState } from "vuex";
import SearchSelector from './SearchSelector/SearchSelector'
import Pagination from '@/components/Pagination/index.vue';
export default {
   name: 'Search',
   components: {
      SearchSelector,
      Pagination
   },
   data() {
      return {
         searchParams: {
            category1Id: "",        //一级分类的id
            category2Id: "",        //二级分类的id
            category3Id: "",        //三级分类的id
            categoryName: "",       //分类名字
            keyword: "",            //关键字
            order: "1:desc",        //排序：初始状态应该是综合||降序
            pageNo: 1,              //分页器用，代表目前第几页
            pageSize: 3,            //每一页展示数据个数
            props: [],              //平台售卖属性操作带的参数
            trademark: ""           //品牌
         },
      };
   },
   beforeMount() {
      //将query和params拷贝入searchParams
      Object.assign(this.searchParams, this.$route.query, this.$route.params)
   },
   mounted() {
      this.getData();
   },
   methods: {
      //向服务器发请求获取search模块数据,封装为一个函数，需要时调用
      getData() {
         this.$store.dispatch('getSearchList', this.searchParams);
      },
      //删除分类面包屑
      removeCategoryName() {
         // this.searchParams.categoryName='';
         //优化：不用空字符串，
         //用undefined是因为值为undefined不会向服务器发送请求，减小服务器压力
         this.searchParams.categoryName = undefined;
         this.searchParams.category1Id = undefined;
         this.searchParams.category2Id = undefined;
         this.searchParams.category3Id = undefined;
         this.getData();
         //地址栏也要改：进行路由跳转(自我跳转)
         if (this.$route.params) {//永远true
            this.$router.push({ name: "search", params: this.$route.params })
         }
      },
      //删除关键字面包屑
      removeKeyword() {
         this.searchParams.keyword = undefined;
         this.getData();
         //地址栏也要改 ：进行路由跳转(自我跳转)
         if (this.$route.query) {//永远true
            this.$router.push({ name: "search", query: this.$route.query })
         }
         //利用全局事件总线清空搜索栏内容
         this.$bus.$emit('clear');
      },
      removeTradeMark() {
         this.searchParams.trademark = '';
         this.getData();
         //地址栏也要改：进行路由跳转(自我跳转)
         // if (this.$route.params) {//永远true
         //    this.$router.push({ name: "search", params: this.$route.params })
         // }
      },
      //删除品牌面包屑
      removeAttr(index) {
         //再次整理参数
         this.searchParams.props.splice(index, 1);
         this.getData();
      },
      //品牌点击，自定义事件回调
      trademarkInfo(trademark) {
         this.searchParams.trademark = `${trademark.tmId}:${trademark.tmName}`;
         //向服务器发请求获取search模块数据
         this.getData();
      },
      //平台属性回调函数，自定义事件
      attrInfo(attr, attrValue) {
         let props = `${attr.attrId}:${attrValue}:${attr.attrName}`;
         //数组去重，有重则不再添加面包屑
         if (this.searchParams.props.indexOf(props) == -1) {
            this.searchParams.props.push(props);
            //再次发请求
            this.getData();
         }

      },
      //排序操作
      changeOrder(flag) {//flag：点击的排序方式
         //初始默认状态：综合||降序 1:desc
         let originFlag = this.searchParams.order.split(':')[0]; //点击前页面被选中的是综合1还是价格2
         let originSort = this.searchParams.order.split(':')[1]; //点击前页面显示的是上箭头asc还是下箭头desc
         let newOrder = '';
         if (flag == originFlag) {//点击已被选中的模块，排序上下变反
            newOrder = `${originFlag}:${originSort == 'desc' ? 'asc' : 'desc'}`
         } else {                 ////点击未被选中的模块，变排序方式
            newOrder = `${flag}:${'desc'}`
         }
         //将新的order赋予searchParams
         this.searchParams.order = newOrder;
         this.getData()
      },
      //自定义事件,获取当前第几页
      getPageNo(pageNo){
         this.searchParams.pageNo=pageNo;
         this.getData();

      }
   },
   computed: {
      ...mapGetters(['goodsList']),
      //获取search
      ...mapState({
         total:state=>state.search.searchList.total

      }),
      isOne() {
         return this.searchParams.order.indexOf('1') != -1;   //判断是综合则返回true
      },
      isTwo() {
         return this.searchParams.order.indexOf('2') != -1;
      },
      isDesc() {
         return this.searchParams.order.indexOf('desc') != -1;
      },
      isAsc() {
         return this.searchParams.order.indexOf('asc') != -1;
      },

   },

   watch: {
      //监听路由的信息是否发生变化，如果发生变化，再次发起请求
      $route(newValue, oldValue) {
         //不用空字符串，用undefined是因为值为undefined不会向服务器发送请求，减小服务器压力
         this.searchParams.category1Id = undefined;
         this.searchParams.category2Id = undefined;
         this.searchParams.category3Id = undefined;
         Object.assign(this.searchParams, this.$route.query, this.$route.params)
         this.getData();
      }
   }
}
</script>

<style lang="less" scoped>
.main {
   margin: 10px 0;

   .py-container {
      width: 1200px;
      margin: 0 auto;

      .bread {
         margin-bottom: 5px;
         overflow: hidden;

         .sui-breadcrumb {
            padding: 3px 15px;
            margin: 0;
            font-weight: 400;
            border-radius: 3px;
            float: left;

            li {
               display: inline-block;
               line-height: 18px;

               a {
                  color: #666;
                  text-decoration: none;

                  &:hover {
                     color: #4cb9fc;
                  }
               }
            }
         }

         .sui-tag {
            margin-top: -5px;
            list-style: none;
            font-size: 0;
            line-height: 0;
            padding: 5px 0 0;
            margin-bottom: 18px;
            float: left;

            .with-x {
               font-size: 12px;
               margin: 0 5px 5px 0;
               display: inline-block;
               overflow: hidden;
               color: #000;
               background: #f7f7f7;
               padding: 0 7px;
               height: 20px;
               line-height: 20px;
               border: 1px solid #dedede;
               white-space: nowrap;
               transition: color 400ms;
               cursor: pointer;

               i {
                  margin-left: 10px;
                  cursor: pointer;
                  font: 400 14px tahoma;
                  display: inline-block;
                  height: 100%;
                  vertical-align: middle;
               }

               &:hover {
                  color: #28a3ef;
               }
            }
         }
      }

      .details {
         margin-bottom: 5px;

         .sui-navbar {
            overflow: visible;
            margin-bottom: 0;

            .filter {
               min-height: 40px;
               padding-right: 20px;
               background: #fbfbfb;
               border: 1px solid #e2e2e2;
               padding-left: 0;
               border-radius: 0;
               box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065);

               .sui-nav {
                  position: relative;
                  left: 0;
                  display: block;
                  float: left;
                  margin: 0 10px 0 0;

                  li {
                     float: left;
                     line-height: 18px;

                     a {
                        display: block;
                        cursor: pointer;
                        padding: 11px 15px;
                        color: #777;
                        text-decoration: none;
                     }

                     &.active {
                        a {
                           background: #e1251b;
                           color: #fff;
                        }
                     }
                  }
               }
            }
         }

         .goods-list {
            margin: 20px 0;

            ul {
               display: flex;
               flex-wrap: wrap;

               li {
                  height: 100%;
                  width: 20%;
                  margin-top: 10px;
                  line-height: 28px;

                  .list-wrap {
                     .p-img {
                        padding-left: 15px;
                        width: 215px;
                        height: 255px;

                        a {
                           color: #666;

                           img {
                              max-width: 100%;
                              height: auto;
                              vertical-align: middle;
                           }
                        }
                     }

                     .price {
                        padding-left: 15px;
                        font-size: 18px;
                        color: #c81623;

                        strong {
                           font-weight: 700;

                           i {
                              margin-left: -5px;
                           }
                        }
                     }

                     .attr {
                        padding-left: 15px;
                        width: 85%;
                        overflow: hidden;
                        margin-bottom: 8px;
                        min-height: 38px;
                        cursor: pointer;
                        line-height: 1.8;
                        display: -webkit-box;
                        -webkit-box-orient: vertical;
                        -webkit-line-clamp: 2;

                        a {
                           color: #333;
                           text-decoration: none;
                        }
                     }

                     .commit {
                        padding-left: 15px;
                        height: 22px;
                        font-size: 13px;
                        color: #a7a7a7;

                        span {
                           font-weight: 700;
                           color: #646fb0;
                        }
                     }

                     .operate {
                        padding: 12px 15px;

                        .sui-btn {
                           display: inline-block;
                           padding: 2px 14px;
                           box-sizing: border-box;
                           margin-bottom: 0;
                           font-size: 12px;
                           line-height: 18px;
                           text-align: center;
                           vertical-align: middle;
                           cursor: pointer;
                           border-radius: 0;
                           background-color: transparent;
                           margin-right: 15px;
                        }

                        .btn-bordered {
                           min-width: 85px;
                           background-color: transparent;
                           border: 1px solid #8c8c8c;
                           color: #8c8c8c;

                           &:hover {
                              border: 1px solid #666;
                              color: #fff !important;
                              background-color: #666;
                              text-decoration: none;
                           }
                        }

                        .btn-danger {
                           border: 1px solid #e1251b;
                           color: #e1251b;

                           &:hover {
                              border: 1px solid #e1251b;
                              background-color: #e1251b;
                              color: white !important;
                              text-decoration: none;
                           }
                        }
                     }
                  }
               }
            }
         }

         .page {
            width: 733px;
            height: 66px;
            overflow: hidden;
            float: right;

            .sui-pagination {
               margin: 18px 0;

               ul {
                  margin-left: 0;
                  margin-bottom: 0;
                  vertical-align: middle;
                  width: 490px;
                  float: left;

                  li {
                     line-height: 18px;
                     display: inline-block;

                     a {
                        position: relative;
                        float: left;
                        line-height: 18px;
                        text-decoration: none;
                        background-color: #fff;
                        border: 1px solid #e0e9ee;
                        margin-left: -1px;
                        font-size: 14px;
                        padding: 9px 18px;
                        color: #333;
                     }

                     &.active {
                        a {
                           background-color: #fff;
                           color: #e1251b;
                           border-color: #fff;
                           cursor: default;
                        }
                     }

                     &.prev {
                        a {
                           background-color: #fafafa;
                        }
                     }

                     &.disabled {
                        a {
                           color: #999;
                           cursor: default;
                        }
                     }

                     &.dotted {
                        span {
                           margin-left: -1px;
                           position: relative;
                           float: left;
                           line-height: 18px;
                           text-decoration: none;
                           background-color: #fff;
                           font-size: 14px;
                           border: 0;
                           padding: 9px 18px;
                           color: #333;
                        }
                     }

                     &.next {
                        a {
                           background-color: #fafafa;
                        }
                     }
                  }
               }

               div {
                  color: #333;
                  font-size: 14px;
                  float: right;
                  width: 241px;
               }
            }
         }
      }
   }
}
</style>